﻿/**
 *
 * @file FITKAcousticsMaterialsIsosolid.h
 * @brief 各向同性固体材料数据类声明
 * @author XingXuanCi (xingxuanci@diso.cn)
 * @date 2024-10-31
 *
 */
#ifndef FITKACOUSTICSMATERIALSISOSOLID_H
#define FITKACOUSTICSMATERIALSISOSOLID_H

#include "FITKAcousticsAbsMaterial.h"
#include "FITKAcousticsPhysicsAPI.h"

namespace Acoustics
{
    /**
     * @brief  各向同性固体材料数据类声明
     * @author XingXuanCi (xingxuanci@diso.cn)
     * @date   2024-10-31
     */
    class FITKAcousticsPhysicsAPI  FITKAcousticsMaterialsIsosolid : public FITKAcousticsAbsMaterial
    {
        FITKCLASS(Acoustics, FITKAcousticsMaterialsIsosolid);
    public:
        /**
         * @brief  构造函数
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date   2024-10-31
         */
        explicit FITKAcousticsMaterialsIsosolid() = default;
        /**
         * @brief  析构函数
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date   2024-10-31
         */
        virtual ~FITKAcousticsMaterialsIsosolid() = default;
        /**
         * @brief 获取声学材料类型
         * @return AcousticsMaterialType 声学材料类型（各向同性固体）
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date 2024-09-29
         */
        FITKAcousticsAbsMaterial::AcousticsMaterialType getAcousticsMaterialType() override;
       
        /**
         * @brief 获取拉伸模量
         * @return double 拉伸模量
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date 2024-09-29
         */
        double getTensileModulus() const;
        /**
         * @brief 设置拉伸模量
         * @param[i] tensileModulus 拉伸模量
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date 2024-09-29
         */
        void setTensileModulus(double tensileModulus);
        /**
         * @brief 获取剪切模量
         * @return double 剪切模量
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date 2024-09-29
         */
        double getShearModulus() const;
        /**
         * @brief 设置剪切模量
         * @param[i] shearModulus 剪切模量
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date 2024-09-29
         */
        void setShearModulus(double shearModulus);
        /**
         * @brief 获取泊松比
         * @return double 泊松比
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date 2024-10-29
         */
        double getPoissonRatio() const;
        /**
         * @brief 设置泊松比
         * @param[i] poissonRatio 泊松比
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date 2024-10-29
         */
        void setPoissonRatio(double poissonRatio);
        /**
        * @brief 复制数据对象,深拷贝，数据id不拷贝
        * @param[i] obj 被拷贝的对象
        * @return 是否执行成功
        * @author XingXuanCi (xingxuanci@diso.cn)
        * @date 2024-11-15
        */
        virtual bool copy(FITKAbstractDataObject* obj) override;

    private:
        /**
         * @brief  各向同性固体-拉伸模量
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date   2024-09-29
         */
        double _tensileModulus{ 0.0 };
        /**
         * @brief  各向同性固体-剪切模量
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date   2024-09-29
         */
        double _shearModulus{ 0.0 };
        /**
         * @brief  各向同性固体-泊松比
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date   2024-10-29
         */
        double _poissonRatio{ 0.0 };

    };
}

#endif // FITKACOUSTICSMATERIALSISOSOLID_H
